# !/usr/bin/env python
# _*_ coding:utf-8 _*_

# 适配 分布式 和 非分布式  过滤器
import redis

from scrapy_plus.conf import settings


class BaseFilter(object):
    # 1.添加到过滤器
    def add_fp(self, fp):
        pass

    # 2.判断 重复
    def exists(self, fp):
        pass


# 1.非分布式的 过滤器
class NormalFilterContainer(BaseFilter):
    def __init__(self):
        self.filter_container = set()

    # 1.添加到过滤器
    def add_fp(self, fp):
        self.filter_container.add(fp)

    # 2.判断 重复
    def exists(self, fp):
        if fp in self.filter_container:
            return True
        else:
            return False


# 2. 分布式的过滤器
class RedisFilterContainer(BaseFilter):
    def __init__(self):
        self.filter_container = redis.StrictRedis(
            host=settings.REDIS_HOST,
            port=settings.REDIS_PORT
        )

        # 保存指纹的key
        self.fp_key = settings.REDIS_FP_KEY

    # 1.添加到过滤器
    def add_fp(self, fp):
        self.filter_container.sadd(self.fp_key, fp)

    # 2.判断 重复
    def exists(self, fp):
        return self.filter_container.sismember(self.fp_key, fp)

